home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / whatview / wvdata.e < prev    next >
Text File  |  1994-05-02  |  17KB  |  418 lines

  1. /*********************************/
  2. /* OpenClose Libraries           */
  3. /*********************************/
  4. PROC p_OpenLibraries() HANDLE /*"p_OpenLibraries()"*/
  5.     IF (intuitionbase:=OpenLibrary('intuition.library',37))=NIL THEN Raise(ER_INTUITIONLIB)
  6.     IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN Raise(ER_GADTOOLSLIB)
  7.     IF (gfxbase:=OpenLibrary('graphics.library',37))=NIL THEN Raise(ER_GRAPHICSLIB)
  8.     IF (whatisbase:=OpenLibrary('whatis.library',3))=NIL THEN Raise(ER_WHATISLIB)
  9.     IF (reqtoolsbase:=OpenLibrary('reqtools.library',37))=NIL THEN Raise(ER_REQTOOLSLIB)
  10.     IF (execbase:=OpenLibrary('exec.library',37))=NIL THEN Raise(ER_EXECLIB)
  11.     IF (workbenchbase:=OpenLibrary('workbench.library',37))=NIL THEN Raise(ER_WORKBENCHLIB)
  12.     IF (utilitybase:=OpenLibrary('utility.library',37))=NIL THEN Raise(ER_UTILITYLIB)
  13.     IF (dosbase:=OpenLibrary('dos.library',37))=NIL THEN Raise(ER_DOSLIB)
  14.     IF (iconbase:=OpenLibrary('icon.library',37))=NIL THEN Raise(ER_ICONLIB)
  15.     IF (rexxsysbase:=OpenLibrary('rexxsyslib.library',36))=NIL THEN Raise(ER_REXXSYSLIBLIB)
  16.     Raise(ER_NONE)
  17. EXCEPT
  18.     RETURN exception
  19. ENDPROC
  20. PROC p_CloseLibraries()  /*"p_CloseLibraries()"*/
  21.     IF rexxsysbase THEN CloseLibrary(rexxsysbase)
  22.     IF iconbase THEN CloseLibrary(iconbase)
  23.     IF dosbase THEN CloseLibrary(dosbase)
  24.     IF utilitybase THEN CloseLibrary(utilitybase)
  25.     IF workbenchbase THEN CloseLibrary(workbenchbase)
  26.     IF execbase THEN CloseLibrary(execbase)
  27.     IF whatisbase THEN CloseLibrary(whatisbase)
  28.     IF gfxbase THEN CloseLibrary(gfxbase)
  29.     IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  30.     IF intuitionbase THEN CloseLibrary(intuitionbase)
  31. ENDPROC
  32. /*********************************/
  33. /* Window Proc                   */
  34. /*********************************/
  35. PROC p_SetUpScreen() HANDLE /*"p_SetUpScreen()"*/
  36.     IF (screen:=LockPubScreen('Workbench'))=NIL THEN Raise(ER_LOCKSCREEN)
  37.     IF (visual:=GetVisualInfoA(screen,NIL))=NIL THEN Raise(ER_VISUAL)
  38.     offy:=screen.wbortop+Int(screen.rastport+58)+1
  39.     Raise(ER_NONE)
  40. EXCEPT
  41.     RETURN exception
  42. ENDPROC
  43. PROC p_SetDownScreen() /*"p_SetDownScreen()"*/
  44.     IF visual THEN FreeVisualInfo(visual)
  45.     IF screen THEN UnlockPubScreen(NIL,screen)
  46.     screen:=NIL
  47. ENDPROC
  48. PROC p_InitwvWindow() HANDLE /*"p_InitwvWindow()"*/
  49.     IF (wv_glist:=CreateContext({wv_glist}))=NIL THEN Raise(ER_CONTEXT)
  50.     IF (g_whatview:=CreateGadgetA(BUTTON_KIND,wv_glist,[18,17,91,12,'_Whatview',tattr,0,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  51.     IF (g_info:=CreateGadgetA(BUTTON_KIND,g_whatview,[109,17,91,12,'_Info',tattr,1,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  52.     IF (g_addicon:=CreateGadgetA(BUTTON_KIND,g_info,[200,17,91,12,'_AddIcon',tattr,2,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  53.     IF (g_execute:=CreateGadgetA(BUTTON_KIND,g_addicon,[18,30,91,12,'_Execute',tattr,3,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  54.     IF (g_prefs:=CreateGadgetA(BUTTON_KIND,g_execute,[109,30,91,12,'_Prefs',tattr,4,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  55.     IF (g_quit:=CreateGadgetA(BUTTON_KIND,g_prefs,[200,30,91,12,'_Quit',tattr,5,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
  56.     Raise(ER_NONE)
  57. EXCEPT
  58.     RETURN exception
  59. ENDPROC
  60. PROC p_RenderwvWindow() /*"p_RenderwvWindow()"*/
  61.     DrawBevelBoxA(wv_window.rport,9,14,290,33,[GTBB_RECESSED,0,GT_VISUALINFO,visual,TAG_DONE,0])
  62.     RefreshGList(g_whatview,wv_window,NIL,-1)
  63.     Gt_RefreshWindow(wv_window,NIL)
  64. ENDPROC
  65. PROC p_OpenwvWindow() HANDLE /*"p_OpenwvWindow()"*/
  66.     IF (wv_window:=OpenWindowTagList(NIL,
  67.                       [WA_LEFT,winx,
  68.                        WA_TOP,winy,
  69.                        WA_WIDTH,307,
  70.                        WA_HEIGHT,51,
  71.                        WA_IDCMP,$240,
  72.                        WA_FLAGS,$102E,
  73.                        WA_GADGETS,wv_glist,
  74.                        WA_TITLE,'WhatView v0.15 © NasGûl',
  75.                        WA_SCREENTITLE,'Made With GadToolsBox v2.0 © 1991-1993',
  76.                        TAG_DONE]))=NIL
  77.         IF (wv_window:=OpenWindowTagList(NIL,
  78.                           [WA_LEFT,10,
  79.                            WA_TOP,10,
  80.                            WA_WIDTH,307,
  81.                            WA_HEIGHT,51,
  82.                            WA_IDCMP,$240,
  83.                            WA_FLAGS,$102E,
  84.                            WA_GADGETS,wv_glist,
  85.                            WA_TITLE,'WhatView v0.15 © NasGûl',
  86.                            WA_SCREENTITLE,'Made With GadToolsBox v2.0 © 1991-1993',
  87.                            TAG_DONE]))=NIL THEN Raise(ER_WINDOW)
  88.     ENDIF
  89.     p_RenderwvWindow()
  90.     IF (appwindow:=AddAppWindowA(0,0,wv_window,prgport,NIL))=NIL THEN Raise(ER_APPWIN)
  91.     Raise(ER_NONE)
  92. EXCEPT
  93.     RETURN exception
  94. ENDPROC
  95. PROC p_RemwvWindow() /*"p_RemwvWindow()"*/
  96.     IF appwindow THEN RemoveAppWindow(appwindow)
  97.     winx:=wv_window.leftedge
  98.     winy:=wv_window.topedge
  99.     IF wv_window THEN CloseWindow(wv_window)
  100.     IF wv_glist THEN FreeGadgets(wv_glist)
  101.     wv_window:=NIL
  102. ENDPROC
  103. PROC p_OpenWindow() HANDLE /*"p_OpenWindow()"*/
  104.     DEF t
  105.     IF (t:=p_SetUpScreen())<>ER_NONE THEN Raise(t)
  106.     IF (t:=p_InitwvWindow())<>ER_NONE THEN Raise(t)
  107.     IF (t:=p_OpenwvWindow())<>ER_NONE THEN Raise(t)
  108.     Raise(ER_NONE)
  109. EXCEPT
  110.     RETURN exception
  111. ENDPROC
  112. PROC p_CloseWindow() /*"p_CloseWindow()"*/
  113.     p_RemwvWindow()
  114.     p_SetDownScreen()
  115. ENDPROC
  116. /*********************************/
  117. /* DEBUG PROC                    */
  118. /*********************************/
  119. PROC dWriteF(format,data) /*"dWriteF(format,dat)"*/
  120. /********************************************************************************
  121.  * Para         : PTR TO LONG like ['\s','\d'],idem like [string,address]
  122.  * Return       : NONE
  123.  * Description  : WriteF() if DEBUG=TRUE.
  124.  *******************************************************************************/
  125.     DEF p_format[10]:LIST
  126.     DEF p_data[10]:LIST
  127.     DEF b
  128.     p_format:=format
  129.     p_data:=data
  130.     FOR b:=0 TO ListLen(p_format)-1
  131.         IF DEBUG=TRUE THEN WriteF(p_format[b],p_data[b])
  132.     ENDFOR
  133. ENDPROC
  134. /*********************************/
  135. /* Listes proc                   */
  136. /*********************************/
  137. PROC p_InitList() HANDLE /*"p_InitList()"*/
  138. /********************************************************************************
  139.  * Para         : NONE
  140.  * Return       : address of the new list if ok,else NIL.
  141.  * Description  : Initialise a list.
  142.  *******************************************************************************/
  143.     DEF i_list:PTR TO lh
  144.     i_list:=New(SIZEOF lh)
  145.     i_list.tail:=0
  146.     i_list.head:=i_list.tail
  147.     i_list.tailpred:=i_list.head
  148.     i_list.type:=0
  149.     i_list.pad:=0
  150.     IF i_list THEN Raise(i_list) ELSE Raise(NIL)
  151. EXCEPT
  152.     RETURN exception
  153. ENDPROC
  154. PROC p_GetNumNode(ptr_list,adr_node) /*"p_GetNumNode(ptr_list,adr_node)"*/
  155. /********************************************************************************
  156.  * Para         : address of list,address of node
  157.  * Return       : the number of the node.
  158.  * Description  : Find the number of a node.
  159.  *******************************************************************************/
  160.     DEF g_list:PTR TO lh
  161.     DEF g_node:PTR TO ln
  162.     DEF count=0
  163.     g_list:=ptr_list
  164.     g_node:=g_list.head
  165.     WHILE g_node
  166.         IF g_node=adr_node THEN RETURN count
  167.         INC count
  168.         g_node:=g_node.succ
  169.     ENDWHILE
  170.     RETURN NIL
  171. ENDPROC
  172. PROC p_CleanActionList(list:PTR TO lh) /*"p_CleanActionList(list:PTR TO lh)"*/
  173.     DEF eactnode:PTR TO actionnode
  174.     DEF node:PTR TO ln
  175.     eactnode:=list.head
  176.     WHILE eactnode
  177.         node:=eactnode
  178.         IF node.succ<>0
  179.             IF node.name THEN DisposeLink(node.name)
  180.             IF eactnode.command THEN DisposeLink(eactnode.command)
  181.             IF eactnode.currentdir THEN DisposeLink(eactnode.currentdir)
  182.             IF eactnode.cmd THEN DisposeLink(eactnode.cmd)
  183.             IF eactnode THEN Dispose(eactnode)
  184.             IF node.succ=0
  185.                 RemTail(list)
  186.             ELSEIF node.pred=0
  187.                 RemHead(list)
  188.             ELSEIF (node.succ<>0) AND (node.pred<>0)
  189.                 Remove(node)
  190.             ENDIF
  191.         ENDIF
  192.         eactnode:=node.succ
  193.     ENDWHILE
  194.     list.tail:=0
  195.     list.head:=list.tail
  196.     list.tailpred:=list.head
  197.     list.type:=0
  198.     list.pad:=0
  199. ENDPROC
  200. PROC p_EmptyList(adr_list) /*"p_EmptyList(adr_list)"*/
  201. /********************************************************************************
  202.  * Para         : address of list.
  203.  * Return       : TRUE if list is empty,else address of list.
  204.  * Description  : Look if a list is empty.
  205.  *******************************************************************************/
  206.     DEF e_list:PTR TO lh,count=0
  207.     DEF e_node:PTR TO ln
  208.     e_list:=adr_list
  209.     e_node:=e_list.head
  210.     WHILE e_node
  211.         IF e_node.succ<>0 THEN INC count
  212.         e_node:=e_node.succ
  213.     ENDWHILE
  214.     IF count=0 THEN RETURN TRUE ELSE RETURN e_list
  215. ENDPROC
  216. PROC p_RemoveActionList(list:PTR TO lh,mode) /*"p_RemoveActionList(list:PTR TO lh,mode)"*/
  217.     p_CleanActionList(list)
  218.     IF mode=TRUE
  219.         IF list THEN Dispose(list)
  220.     ENDIF
  221. ENDPROC
  222. PROC p_AjouteArgNode(list:PTR TO lh,argname,arglock) /*"p_AjouteArgNode(list:PTR TO lh,argname,arglock)"*/
  223.     DEF myarg:PTR TO wvarg
  224.     DEF node:PTR TO ln
  225.     DEF pv[256]:STRING
  226.     DEF fullname[256]:STRING
  227.     DEF idstring[9]:STRING
  228.     DEF nn,idtype,lock=NIL,fib:fileinfoblock
  229.     DEF size
  230.     myarg:=New(SIZEOF wvarg)
  231.     NameFromLock(arglock,pv,256)
  232.     AddPart(pv,'',256)
  233.     IF EstrLen(argname)<>0
  234.         StringF(fullname,'\s\s',pv,argname)
  235.     ELSE
  236.         StringF(fullname,'\s',pv)
  237.     ENDIF
  238.     IF lock:=Lock(fullname,-2)
  239.         IF Examine(lock,fib)
  240.             size:=fib.size
  241.             IF fib.size=0
  242.                 StringF(fullname,'\s',pv)
  243.                 StringF(argname,'\s',fib.filename)
  244.             ELSE
  245.             ENDIF
  246.             IF fib THEN Dispose(fib)
  247.         ENDIF
  248.         IF lock THEN UnLock(lock)
  249.     ENDIF
  250.     myarg.lock:=DupLock(arglock)
  251.     idtype:=WhatIs(fullname,[WI_DEEP,1])
  252.     idstring:=GetIDString(idtype)
  253.     node:=New(SIZEOF ln)
  254.     node.succ:=0
  255.     myarg.size:=size
  256.     node.name:=String(EstrLen(argname))
  257.     StrCopy(node.name,argname,ALL)
  258.     CopyMem(node,myarg.node,SIZEOF ln)
  259.     AddTail(list,myarg.node)
  260.     nn:=p_GetNumNode(list,myarg.node)
  261.     IF nn=0
  262.         list.head:=myarg.node
  263.         node.pred:=0
  264.     ENDIF
  265.     IF idstring
  266.         StringF(pv,'\s',idstring)
  267.         myarg.idstring:=String(EstrLen(pv))
  268.         StrCopy(myarg.idstring,pv,ALL)
  269.     ENDIF
  270.     IF node THEN Dispose(node)
  271. ENDPROC
  272. PROC p_RemoveArgList(list:PTR TO lh,mode) /*"p_RemoveArgList(list:PTR TO lh,mode)"*/
  273.     DEF rarg:PTR TO wvarg
  274.     DEF node:PTR TO ln
  275.     rarg:=list.head
  276.     WHILE rarg
  277.         node:=rarg
  278.         IF node.succ<>0
  279.             IF node.name THEN DisposeLink(node.name)
  280.             IF rarg.lock THEN UnLock(rarg.lock)
  281.             /*IF rarg.date THEN Dispose(rarg.date)*/
  282.             IF rarg.idstring THEN DisposeLink(rarg.idstring)
  283.         ENDIF
  284.         IF node.succ=0
  285.             RemTail(list)
  286.         ELSEIF node.pred=0
  287.             RemHead(list)
  288.         ELSEIF (node.succ<>0) AND (node.pred<>0)
  289.             Remove(node)
  290.         ENDIF
  291.         rarg:=node.succ
  292.     ENDWHILE
  293.     IF mode=TRUE
  294.         IF list THEN Dispose(list)
  295.     ENDIF
  296. ENDPROC
  297. PROC p_WriteFArgList(list:PTR TO lh,action) /*"p_WriteFArgList(list:PTR TO lh,action)"*/
  298.     DEF rarg:PTR TO wvarg
  299.     DEF node:PTR TO ln
  300.     DEF anode:PTR TO actionnode
  301.     DEF mode
  302.     DEF piv[4096]:STRING
  303.     DEF fullname[256]:STRING
  304.     DEF mywbarg:PTR TO wbarg,posbuf=NIL
  305.     DEF oldcd,retstr[256]:STRING
  306.     rarg:=list.head
  307.     WHILE rarg
  308.         node:=rarg
  309.         IF node.succ<>0
  310.                 SELECT action
  311.                     CASE ACT_WHATVIEW
  312.                         IF anode:=FindName(myw.adractionlist,rarg.idstring)
  313.                             mode:=anode.exectype
  314.                             IF anode.numarg=0
  315.                                 posbuf:=anode.arglist
  316.                             ELSE
  317.                                 posbuf:=anode.arglist+(anode.numarg*SIZEOF wbarg)
  318.                             ENDIF
  319.                             SELECT mode
  320.                                 CASE MODE_WB
  321.                                     IF anode.numarg<maxarg
  322.                                         anode.numarg:=anode.numarg+1
  323.                                         mywbarg:=New(SIZEOF wbarg)
  324.                                         mywbarg.lock:=rarg.lock
  325.                                         IF node.name
  326.                                             mywbarg.name:=node.name
  327.                                         ELSE
  328.                                             mywbarg.name:=''
  329.                                         ENDIF
  330.                                         CopyMem(mywbarg,posbuf,SIZEOF wbarg)
  331.                                         posbuf:=posbuf+(anode.numarg*SIZEOF wbarg)
  332.                                         IF mywbarg THEN Dispose(mywbarg)
  333.                                     ENDIF
  334.                                     anode.cmd:=0
  335.                                 CASE MODE_CLI
  336.                                     anode.numarg:=-1
  337.                                     NameFromLock(rarg.lock,piv,256)
  338.                                     IF rarg.size<>0 THEN AddPart(piv,node.name,256)
  339.                                     StringF(fullname,' "\s" ',piv)
  340.                                     StringF(piv,'\s \s',anode.cmd,fullname)
  341.                                     IF anode.cmd THEN DisposeLink(anode.cmd)
  342.                                     anode.cmd:=String(EstrLen(piv))
  343.                                     StrCopy(anode.cmd,piv,ALL)
  344.                             ENDSELECT
  345.                         ELSE
  346.                             IF p_MakeWVRequest('Pas de commande pour:\nFichier :\s\nType    :\s\nSize    :\d\nDate:\s','_Suivant|S_ortie',[node.name,rarg.idstring,rarg.size,rarg.date])=FALSE THEN JUMP exit
  347.                         ENDIF
  348.                     CASE ACT_INFO
  349.                         IF p_MakeWVRequest('Fichier :\s\nType    :\s\nSize    :\d\nDate:\s','_Suivant|S_ortie',[node.name,rarg.idstring,rarg.size,rarg.date])=FALSE THEN JUMP exit
  350.                     CASE ACT_ADDICON
  351.                         NameFromLock(rarg.lock,piv,256)
  352.                         IF rarg.size<>0 THEN AddPart(piv,node.name,256)
  353.                         StringF(fullname,'\s',piv)
  354.                         p_AddIcon(fullname,node.name,rarg.size,rarg.idstring)
  355.                     CASE ACT_EXECUTE
  356.                         IF retstr:=p_MakeWVStringReq(node.name,rarg.idstring,rarg.size)
  357.                             oldcd:=CurrentDir(rarg.lock)
  358.                             StringF(piv,'\s \s',retstr,node.name)
  359.                             Execute(piv,0,stdout)
  360.                             CurrentDir(oldcd)
  361.                         ENDIF
  362.                 ENDSELECT
  363.         ENDIF
  364.         rarg:=node.succ
  365.     ENDWHILE
  366.     exit:
  367.     p_WriteFActionList(myw.adractionlist,ACT_WHATVIEW)
  368. ENDPROC
  369. PROC p_WriteFActionList(list:PTR TO lh,action) /*"p_WriteFActionList(list:PTR TO lh,action)"*/
  370.     DEF eactnode:PTR TO actionnode
  371.     DEF node:PTR TO ln
  372.     DEF mode=NIL
  373.     DEF pv[4096]:STRING
  374.     eactnode:=list.head
  375.     WHILE eactnode
  376.         node:=eactnode
  377.         IF node.succ<>0
  378.             SELECT action
  379.                 CASE ACT_WHATVIEW
  380.                         mode:=eactnode.exectype
  381.                         IF (eactnode.numarg>0) OR (eactnode.numarg=-1)
  382.                             SELECT mode
  383.                                 CASE MODE_WB
  384.                                     p_WBRun(eactnode.command,eactnode.currentdir,eactnode.stack,eactnode.priority,eactnode.numarg,eactnode.arglist)
  385.                                     eactnode.numarg:=0
  386.                                 CASE MODE_CLI
  387.                                     StringF(pv,'\s \s',eactnode.command,eactnode.cmd)
  388.                                     p_CLIRun(pv,eactnode.currentdir,eactnode.stack,eactnode.priority)
  389.                             ENDSELECT
  390.                         ENDIF
  391.                 CASE ACT_INFO
  392.             ENDSELECT
  393.         ENDIF
  394.         eactnode:=node.succ
  395.     ENDWHILE
  396. ENDPROC
  397. PROC p_CleanArgActionList(list:PTR TO lh) /*"p_CleanArgActionList(list:PTR TO lh)"*/
  398.     DEF eactnode:PTR TO actionnode
  399.     DEF node:PTR TO ln
  400.     eactnode:=list.head
  401.     WHILE eactnode
  402.         node:=eactnode
  403.         IF node.succ<>0
  404.             eactnode.numarg:=0
  405.             IF eactnode.cmd THEN DisposeLink(eactnode.cmd)
  406.         ENDIF
  407.         eactnode:=node.succ
  408.     ENDWHILE
  409.     /*
  410.     list.tail:=0
  411.     list.head:=list.tail
  412.     list.tailpred:=list.head
  413.     list.type:=0
  414.     list.pad:=0
  415.     */
  416. ENDPROC
  417.  
  418.